#pragma once

#ifndef FILE_INFO
#define FILE_INFO

/*! \file FileInfo.h
	\brief Header file for FileInfo class.
	
	Details.
*/

#include <string>

#include "FileType.h"

namespace analyzer {

	//! This class is used to pass all informations about the file.
	class FileInfo {
	public:
		/*! \fn FileInfo(void)
			\brief Constructor of class FileInfo
		*/
		FileInfo(void);

		/*! \fn FileInfo(const std::string& fileName, const std::string& path, FileType fileType)
			\brief Constructor of class FileInfo
			\param fileName Name of file.
			\param path Path to file.
			\param fileType Enumeration type of file (UNKNOWN_FILE, HEADER_FILE or SOURCE_FILE).
		*/
		FileInfo(const std::string& fileName, const std::string& path, FileType fileType);
				
		/*! \fn ~FileInfo(void)
			\brief Destructor of class FileInfo.
		*/
		~FileInfo(void);

		/*! \fn std::string getFileName(void) const
			\brief Returns the name of file.
			\return String with name of file.
		*/
		std::string getFileName(void) const;
		
		/*! \fn void setFileName(const std::string& fileName)
			\brief Sets the name of file.
			\param fileName String with new file name.
		*/
		void setFileName(const std::string& fileName);

		/*! \fn std::string getPath(void) const
			\brief Returns the path to file.
			\return String with path to file.
		*/
		std::string getPath(void) const;	
		
		/*! \fn void setPath(const std::string& path)
			\brief Sets the path to file.
			\param path String with new path to file.
		*/
		void setPath(const std::string& path);

		/*! \fn FileType getFileType() const
			\brief Returns enumeration type of file (UNKNOWN_FILE, HEADER_FILE or SOURCE_FILE).
			\return Enumeration type of file (FileType).
		*/
		FileType getFileType() const;
		
		/*! \fn void setFileType(FileType fileType)
			\brief Sets the type of file enumeration FileType (UNKNOWN_FILE, HEADER_FILE or SOURCE_FILE).
			\param fileType FileType with new file type value (UNKNOWN_FILE, HEADER_FILE or SOURCE_FILE).
		*/
		void setFileType(FileType fileType);

	private:
		std::string fileName;
		std::string path;

		FileType fileType;
	};

}

#endif // FILE_INFO